/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.analisadorLexico.automatos;

import compilador.analisadorLexico.CodeReader;
import compilador.analisadorLexico.Token;
import compilador.analisadorLexico.TokenClass;
import compilador.analisadorLexico.TokenErro;

/**
 * @author João Matos
 */
public class AutomatoNumero implements IAutomato{
    
    CodeReader reader;

    public AutomatoNumero(CodeReader reader){
        this.reader = reader;
    }
    /**
     * Supõe que já tenha sido executado AutomatoDigito.extraiToken()
     * @return o token numero com o atributo Inteiro
     */
    @SuppressWarnings("empty-statement")
    public Token extraiToken(){
        reader.clear();
        char currChar = reader.next();
        
        //se o primeiro for dígito
        if(Character.isDigit(currChar))
        {    
            //pula todos os dígitos
            do {
                currChar = reader.next();
            }  while(Character.isDigit(currChar));

            //Se depois que acabar os digitos, vier uma letra ou underline...
            if(Character.isLetter(currChar) || currChar == '_')
            {
                //percorre todo o token até o fim
                do{
                    currChar = reader.next();
                }while(Character.isLetter(currChar) || currChar == '_');
            }
            //Senão, retorna o token numero correto
            else
            {
  
                String num = reader.closeToken();

                return new Token(TokenClass.NUMERO, num, reader.getCurrentLine());
            }
            
            //Por fim, retorna um token erro.
            return new TokenErro(reader.closeToken(), reader.getCurrentLine(), "Número mal-formado");
        }
        //se o primeiro não for dígito, já era.
        return null;
    }
}
